--- title: "multimap多值查询" created: 2025-11-28 tags: - 算法 --- # multimap多值查询 ### 🎯 **目的:** 利用 `multimap` 的**一键多值**特性,快速查找某个键 `q` 所有对应的值。 --- ### 🔑 **核心函数:**`equal_range(q)` - 用于查找所有 **键为** `q` 的元素范围。 - 返回一个 `pair`,表示一个区间 `[first, second)`: - `range.first`:第一个满足 `key == q` 的迭代器; - `range.second`:第一个满足 `key > q` 的迭代器。 ```cpp auto range = multimap.equal_range(q); ``` --- ### ✅ **如何使用:** ```cpp auto range = hx.equal_range("a"); vector ans; for (auto it = range.first; it != range.second; ++it) { ans.push_back(it->second); } ``` - 遍历 `[range.first, range.second)` 区间内所有键为 `"a"` 的元素。 - 访问时用 `it->second` 获取对应的值(句子)。 --- ### ❗ **未命中情况:** 当 `q` **不存在于 multimap 中**时: ```text range.first == range.second ``` - 返回的是一个 **空区间**; - `for` 循环不会进入,说明没有任何匹配项。 可以这样判断: ```cpp if (range.first == range.second) { cout << "没有找到" << endl; } ``` --- ### 📦 应用场景: - 句子首字母缩写匹配; - 分类标签多值查询; - 日志记录、反向索引、多对多关系查询等。 --- ⬅️ [[L2-050 懂蛇语|L2-050 懂蛇语]] 🏠 [[00-天梯赛]] ➡️ [[L2-051 满树的遍历|L2-051 满树的遍历]]